Nginx でIPアドレスによるアクセス制御を行う
前回は、Nginx をインストールして、Basic認証 をかけてみました。今回は、IPアドレスでのアクセス制限をしてみます。
EC2の場合、セキュリティグループでもアクセス制限が出来ますが、今回は Nginx の機能を使います。
そのため、セキュリティーグループで、80ポートに対して 0.0.0.0/0 を許可をしておきます。
nginx.conf の構成
具体的な設定を記述する前に、nginx.conf の構成について少し見てみます。
nginx.conf の設定は以下のようなディレクティブの集まりで出来ています。
worker_processes 1;
ディレクティブは Nginx の各モジュールによって導入されていて、
モジュールを有効にすることによって、そのモジュールで提供しているディレクティブが利用可能になります。
ディレクティブは各モジュールに対するブロックの中に記述します。
※ただし、Main モジュールは例外で設定ファイルのルート部分に記述します。
Nginx の基本的なモジュールは大きく分けて、以下の4つのモジュールがあります。
- Mainモジュール: プロセス管理やセキュリティなどの基本機能を提供します。
- Eventsモジュール: ネットワーク機能の内部メカニズムを設定します。
- Configurationモジュール: ファイルのインクルードを実現します。
- HTTPモジュール: HTTPサーバの基本ブロック、ディレクティブ、変数を格納しているコンポーネントです。
それぞれの定義箇所は以下の通りです。
(Mainモジュールのディレクティブを定義) events { eventsブロック(Eventsモジュールのディレクティブを定義) } http { httpブロック(HTTPモジュールのディレクティブを定義) }
httpブロックは、更に以下のような階層構造を持ちます。
http { server { serverブロック(Webサイトごとの設定を定義) location { locationブロック(Webサイトの特定の位置にだけに適用される設定を定義) } } }
Configurationモジュールは、includeディレクティブを使って、下記のようにファイルのインクルードを行うだけのモジュールです。
include /file/path.conf;
IPアドレスでのアクセス制御
nginx でIPアドレスでのアクセス制御を行う場合は、HttpAccessモジュールを使用します。
以下のように記述します。
location /blog/ { allow xxx.xxxx.xxx.xxx; deny all; }
上記の場合、/blog/ パスには xxx.xxx.xxx.xxx のIPアドレスのみ許可して、それ以外からのアクセスは拒否するという形になります。
Nginx のルールは基本的にトップダウンで処理されます。
Apache の場合は、以下のように Order deny,allow のように順番を指定できました。
Order deny,allow Deny from all Allow from xxx.xxx.xxx.xxx
上記だと、xxx.xxx.xxx.xxx を許可し、それ以外を拒否するという意味になりますが、
Nginx ですと、以下のように書いた場合は、(xxx.xxx.xxx.xxx を含み)すべてアクセス不可になってしまいます。
location /blog/ { deny all; allow xxx.xxx.xxx.xxx; }
逆も同様で、以下のように書いた場合は、(xxx.xxx.xxx.xxx を含み)すべてアクセス可ということになります。
location /blog/ { allow all; deny xxx.xxx.xxx.xxx; }
ちなみに、このディレクティブは、server、http ブロックでも使用可能です。
設定を反映させるために、リロードします。
$ sudo service nginx reload
指定されたIPアドレス以外からアクセスすると 403 となりました。
以上、簡単ではありますが、Basic認証 に続いて、IPアドレスによるアクセス制限をやってみました。
次回は、gzip圧縮とExpiresヘッダーについて書いてみたいと思います。